Прежде чем мы сможем обсудить многие детали действия TCP протокола, нам необходимо ввести подробную терминологию. Для поддержания TCP соединения необходимо иметь несколько переменных. Мы решили, что эти переменные будут помещены в соответствующую запись - блок управления передачей (Transmission Control Block – TCB). Среди переменных блока TCB имеются номера местного и чужого сокетов, флаги безопасности и приоритета для данного соединения, указатели буферов посылки и получения, указатели текущего сегмента и очереди повторной посылки. Кроме всего этого в TCB имеются несколько переменных, имеющих отношение к номерам очередей отправителя и получателя.
Отправление
SND.UNA - посылка неподтверждена SND.NXT - послать следующий сегмент SND.WND - отправить окно SND.UP - отправить срочный указатель SND.WL1 - номер очереди сегмента, использованный для обновления последнего окна SND.WL2 - номер подтверждения в сегменте, используемый для обновления последнего окна ISS - первоначальный номер очереди отправления
Получение
RCV.NXT - получить следующий сегмент RCV.WND - получить окно RCV.UP - получить срочный указатель IRS - первоначальный номер очереди получения
Нижеприведенные диаграммы могут помочь связать некоторые из этих переменных с местом в очереди
Очередь отправления
1. - старые номера очереди, которые получили подтверждение
2. - номера очереди для данных, не получивших подтверждения
3. - номера очереди, допущенные к новой передаче
4. - следующие номера очереди, чья передача еще не разрешена
Очередь получения
1. - старые номера очереди, которые получили подтверждение
2. - номера очереди, допущенные к очередному этапу получения
3. - следующие номера очереди, еще не получившие разрешения
В обсуждении также часто используются некоторые переменные,берущие свое значение из полей очередного сегмента. Переменные для очередного сегмента.
SEG.SEQ - номер очереди для сегмента
SEG.ACK - номер подтверждения для сегмента
SEG.LEN - длина сегмента
SEG.WND - окно для сегмента
SEG.UP - срочный указатель для сегмента
SEG.PRC - приоритет для сегмента
Соединение во время функционирования проходит через серии промежуточных состояний. Это состояния LISTEN, SYN-SENT, SYN-RECEIVED, ESTABLISHED, FIN-WAIT-1, FIN-WAIT-2, CLOSE-WAIT, CLOSING, LAST-ACK, TIME-WAIT, а также фиктивное состояние CLOSED. Состояние CLOSED является фиктивным, поскольку оно представляет состояние, когда не существует блока TCP, а потому и нет соединения. Краткое описание состояний:
LISTEN - Ожидание запроса на соединение со стороны чужих портов и программ TCP
SYN-SENT - Ожидание парного запроса на установление соединения. С нашей стороны запрос уже сделан.
SYN-RECEIVED - Ожидание подтверждения после того, как запрос соединения уже принят и отправлен.
ESTABLISHED - Состояние открытого соединения, принимаемые данные представить пользователю. Это нормальное состояние соединения в фазе передачи данных.
FIN-WAIT-1 - Ожидание запроса от чужой программы TCP, или подтверждения ранее отправленного запроса на закрытие соединения.
FIN-WAIT-2 - Ожидание запроса на закрытие соединения со стороны чужой программы TCP.
CLOSE-WAIT - Ожидание запроса на закрытие соединения со стороны своего клиента.
CLOSING - Ожидание подтверждения со стороны чужой программы TCP запроса о закрытии соединения.
LAST-ACK - Ожидание запроса на закрытие соединения, ранее отправленного чужой программе TCP (запрос включал также подтверждение получения чужого запроса на закрытие соединения).
TIME-WAIT - Ожидание когда истечет достаточное количество времени и можно быть уверенным, что чужая программа TCP получила подтверждение своего запроса на закрытие соединения.
CLOSED - Состояние полного отсутствия соединения.
Соединение TCP переходит с одного состояния на другое в ответ на события. Событие - это запросы клиента (открытие, посылка, получение, закрытие, отказ, получение состояния соединения), приход сегментов, и особенно тех, которые содержат флаги SYN, ACK, RST и FIN, а также истечение выделенного времени.
Диаграмма состояний на рисунке 6 иллюстрирует лишь смену состояний, а также вызвавшие это события, производимые действия, но не адреса, условия ошибок, не действия, не связанные прямо с изменением состояния. Более подробные сведения о действиях программы протокола TCP в ответ на события приведены в последней главе. Замечание. Данная диаграмма является лишь сводной, но не должна восприниматься как полная спецификация.